home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 September / PCWorld_2008-09_cd.bin / v cisle / sadanastroju / wot-20080519-fx.xpi / chrome / wot.jar / skin / include / settings.js < prev   
Text File  |  2008-04-21  |  17KB  |  723 lines

  1. /*
  2.     settings.js
  3.  
  4.     Copyright ⌐ 2007  Against Intuition, Inc. <info@mywot.com>
  5. */
  6.  
  7. /* Globals */
  8.  
  9. var selected = null;
  10. var changes = false;
  11. var warning_custom_allowed = false;
  12. var apps = [ 0, 1, 2, 4 ];
  13.  
  14. /* Buttons */
  15.  
  16. function update_buttons()
  17. {
  18.     $$('.button').each(function(button, i) {
  19.             if (changes) {
  20.                 button.removeClass('disabled');
  21.             } else {
  22.                 button.addClass('disabled');
  23.             }
  24.         });
  25. }
  26.  
  27. /* Navigation */
  28.  
  29. function setpage()
  30. {
  31.     if ($('loading-page').getStyle('display') != 'none') {
  32.         return;
  33.     }
  34.  
  35.     selected = null;
  36.  
  37.     $$('.page').each(function(page, i) {
  38.             if (window.location.hash + '-page' == '#' + page.id) {
  39.                 selected = page.id;
  40.             } else {
  41.                 page.setStyle('display', 'none');
  42.             }
  43.         });
  44.  
  45.     if (!selected || selected == 'loading-page') {
  46.         selected = 'ratings-page';
  47.     }
  48.  
  49.     var hash = selected.replace('-page', '');
  50.  
  51.     $(selected).setStyle('display', 'block');
  52.     window.location.hash = '#' + hash;
  53.  
  54.     $$('.tab').each(function(tab, i) {
  55.             if (tab.id == 'tab-' + hash) {
  56.                 tab.addClass('selected');
  57.             } else {
  58.                 tab.removeClass('selected');
  59.             }
  60.         });
  61.  
  62.     $('settings').setProperty('class', hash);
  63.  
  64.     update_buttons();
  65.     init_forms(selected);
  66. }
  67.  
  68. /* Sample iframes */
  69.  
  70. function switch_sample(base, current, hidden, src)
  71. {
  72.     var ready = ($(hidden).getProperty('src') == src);
  73.  
  74.     if (!ready) {
  75.         $(hidden).setProperty('src', src);
  76.  
  77.         if (selected == base) {
  78.             window.setTimeout(function() {
  79.                     $(hidden).setStyle('display', 'block');
  80.                     $(current).setStyle('display', 'none');
  81.                 }, 500);
  82.             return;
  83.         }
  84.     }
  85.  
  86.     $(hidden).setStyle('display', 'block');
  87.     $(current).setStyle('display', 'none');
  88. }
  89.  
  90. function set_sample(base, src)
  91. {
  92.     var current = base + '-sample-0';
  93.     var hidden  = base + '-sample-1';
  94.  
  95.     if ($(current).getStyle('display') == 'none') {
  96.         current = hidden;
  97.         hidden  = base + '-sample-0';
  98.     }
  99.  
  100.     if ($(current).getProperty('src') != src) {
  101.         switch_sample(base, current, hidden, src);
  102.     }
  103. }
  104.  
  105. function update_samples()
  106. {
  107.     var src = 'chrome://wot/locale/sample.html?';
  108.  
  109.     if ($('use_search_level').checked) {
  110.         src += 'negative';
  111.     }
  112.  
  113.     set_sample('searching', src);
  114.  
  115.     if ($('show_search_popup').checked) {
  116.         src += 'popup';
  117.         apps.slice(1).each(function(i, j) {
  118.                 if (!$('show_application_' + i).checked) {
  119.                     src += 'r' + i;
  120.                 }
  121.             });
  122.     }
  123.  
  124.     set_sample('popup', src);
  125. }
  126.  
  127. /* Warnings */
  128.  
  129. function update_warnings()
  130. {
  131.     apps.slice(1).each(function(i, j) {
  132.             $('warnings-slider-' + i).setStyle('display',
  133.                 ($('show_application_' + i).checked) ? 'block' : 'none');
  134.         });
  135.  
  136.     update_warnings_preset();
  137. }
  138.  
  139. /* Warning presets */
  140.  
  141. var warning_levels = [ 19, 39, 59 ];
  142. var warning_type_none = 0;
  143. var warning_type_notification = 1;
  144. var warning_type_warn = 2;
  145. var warning_type_block = 3;
  146. var warning_type_default = warning_type_warn;
  147.  
  148. var warning_presets = [
  149.     {
  150.         id:            'none',
  151.         levels:        [ 0, 0, 0, 0 ],
  152.         unknowns:    [ false, false, false, false ],
  153.         types:        [ warning_type_none, warning_type_none, warning_type_none, warning_type_none  ]
  154.     }, {
  155.         id:            'moderate',
  156.         levels:        [ warning_levels[0], warning_levels[0], warning_levels[0], 0 ],
  157.         unknowns:    [ false, false, false, false ],
  158.         types:        [ warning_type_warn, warning_type_warn, warning_type_warn, warning_type_none ]
  159.     }, {
  160.         id:            'normal',
  161.         levels:        [ warning_levels[1], warning_levels[1], warning_levels[1], 0 ],
  162.         unknowns:    [ false, false, false, false ],
  163.         types:        [ warning_type_warn, warning_type_warn, warning_type_warn, warning_type_none ]
  164.     }, {
  165.         id:            'effective',
  166.         levels:        [ warning_levels[2], warning_levels[2], warning_levels[2], 0 ],
  167.         unknowns:    [ false, false, false, false ],
  168.         types:        [ warning_type_warn, warning_type_warn, warning_type_warn, warning_type_none ]
  169.     }
  170. ];
  171.  
  172. function change_warning_type_default(type)
  173. {
  174.     for (var i = 0; i < warning_presets.length; ++i) {
  175.         for (var j = 0; j < warning_presets[i].types.length; ++j) {
  176.             if (warning_presets[i].types[j] != warning_type_none &&
  177.                     warning_presets[i].types[j] != warning_type_block) {
  178.                 warning_presets[i].types[j] = type;
  179.             }
  180.         }
  181.     }
  182.  
  183.     apps.each(function(i, j) {
  184.         var input = $('warning_type_' + i);
  185.         var current = Number(input.getProperty('value'));
  186.         if (current != warning_type_none &&
  187.                 current != warning_type_block) {
  188.             input.setProperty('value', type);
  189.         }
  190.     });
  191.  
  192.     warning_type_default = type;
  193.     update_warnings_preset();
  194. }
  195.  
  196. function update_warnings_notification()
  197. {
  198.     var type = warning_type_warn;
  199.  
  200.     apps.each(function(i, j) {
  201.         var input = $('warning_type_' + i);
  202.         var current = Number(input.getProperty('value'));
  203.         if (current == warning_type_notification) {
  204.             type = current;
  205.         }
  206.     });
  207.  
  208.     $('warnings-type-notification').setProperty('checked',
  209.         (type == warning_type_notification));
  210.     change_warning_type_default(type);
  211. }
  212.  
  213. function toggle_warnings_notification()
  214. {
  215.     if ($('warnings-type-notification').checked) {
  216.         change_warning_type_default(warning_type_notification);
  217.     } else {
  218.         change_warning_type_default(warning_type_warn);
  219.     }
  220. }
  221.  
  222. function select_warnings_preset(id)
  223. {
  224.     $('warnings-level-' + id).setProperty('checked', true);
  225.     $$('.warnings-help').each(function(item, j) {
  226.             item.setStyle('display', 'none');
  227.         });
  228.     $('warnings-help-' + id).setStyle('display', 'block');
  229.     init_forms(selected);
  230. }
  231.  
  232. function update_warnings_preset()
  233. {
  234.     var match = false;
  235.  
  236.     for (var i = 0; i < warning_presets.length; ++i) {
  237.         match = true;
  238.  
  239.         apps.each(function(j, k) {
  240.                 if (j > 0 && !$('show_application_' + j).checked) {
  241.                     return;
  242.                 }
  243.                 if (Number($('warning_level_' + j).getProperty('value')) !=
  244.                         warning_presets[i].levels[k]) {
  245.                     match = false;
  246.                     return;
  247.                 }
  248.                 if ($('warning_unknown_' + j).checked !=
  249.                         warning_presets[i].unknowns[k]) {
  250.                     match = false;
  251.                     return;
  252.                 }
  253.                 if (Number($('warning_type_' + j).getProperty('value')) !=
  254.                         warning_presets[i].types[k]) {
  255.                     match = false;
  256.                     return;
  257.                 }
  258.             });
  259.  
  260.         if (match) {
  261.             select_warnings_preset(warning_presets[i].id);
  262.             break;
  263.         }
  264.     }
  265.  
  266.     if (!match) {
  267.         select_warnings_preset('custom');
  268.     }
  269.  
  270.     return match;
  271. }
  272.  
  273. function set_warnings_preset(id)
  274. {
  275.     var match = false;
  276.  
  277.     for (var i = 0; i < warning_presets.length; ++i) {
  278.         if (('warnings-level-' + warning_presets[i].id) != id) {
  279.             continue;
  280.         }
  281.  
  282.         apps.each(function(j, k) {
  283.                 $('warning_level_' + j).setProperty('value',
  284.                     warning_presets[i].levels[k]);
  285.  
  286.                 $('warning_unknown_' + j).checked =
  287.                     warning_presets[i].unknowns[k];
  288.  
  289.                 $('warning_type_' + j).setProperty('value',
  290.                     warning_presets[i].types[k]);
  291.             });
  292.  
  293.         match = true;
  294.         select_warnings_preset(warning_presets[i].id);
  295.         break;
  296.     }
  297.  
  298.     if (!match) {
  299.         update_warnings_preset();
  300.     }
  301.  
  302.     update_warnings_sliders();
  303. }
  304.  
  305. /* Warning customization */
  306.  
  307. function update_warnings_sliders()
  308. {
  309.     apps.each(function(i, j) {
  310.             var slider = $('warnings-slider-' + i);
  311.             var level = Number($('warning_level_' + i).getProperty('value'));
  312.             var type = Number($('warning_type_' + i).getProperty('value'));
  313.  
  314.             [ 0, 1, 2 ].each(function(k, l) {
  315.                     if (type != warning_type_none && level >= warning_levels[k]) {
  316.                         slider.addClass('level-' + k);
  317.                     } else {
  318.                         slider.removeClass('level-' + k);
  319.                     }
  320.                 });
  321.  
  322.             if (type == warning_type_block) {
  323.                 $('warnings-type-' + i + '-stack').addClass('blocking');
  324.                 $('warnings-type-' + i + '-stack').removeClass('warning');
  325.             } else {
  326.                 $('warnings-type-' + i + '-stack').addClass('warning');
  327.                 $('warnings-type-' + i + '-stack').removeClass('blocking');
  328.             }
  329.         });
  330. }
  331.  
  332. function update_warning_type(i)
  333. {
  334.     var level = Number($('warning_level_' + i).getProperty('value'));
  335.     var unknown = $('warning_unknown_' + i).checked;
  336.  
  337.     var type = Number($('warning_type_' + i).getProperty('value'));
  338.     var set = type;
  339.  
  340.     if (level > 0 || unknown) {
  341.         if (type == warning_type_none) {
  342.             set = warning_type_default;
  343.         }
  344.     } else if (type != warning_type_none) {
  345.         set = warning_type_none;
  346.     }
  347.  
  348.     if (type != set) {
  349.         $('warning_type_' + i).setProperty('value', set);
  350.         update_warnings_preset();
  351.         update_warnings_sliders();
  352.         return true;
  353.     }
  354.  
  355.     return false;
  356. }
  357.  
  358. function set_warnings_slider(i, level)
  359. {
  360.     $('warning_level_' + i).setProperty('value', level);
  361.  
  362.     if (!update_warning_type(i)) {
  363.         update_warnings_preset();
  364.         update_warnings_sliders();
  365.     }
  366.  
  367.     changes = true;
  368.     update_buttons();
  369. }
  370.  
  371. function increase_warnings_slider(i)
  372. {
  373.     var type  = Number($('warning_type_'  + i).getProperty('value'));
  374.     var level = Number($('warning_level_' + i).getProperty('value'));
  375.  
  376.     var set = warning_levels[2];
  377.  
  378.     if (type == warning_type_none || level < warning_levels[0]) {
  379.         set = warning_levels[0];
  380.     } else if (level < warning_levels[1]) {
  381.         set = warning_levels[1];
  382.     }
  383.  
  384.     set_warnings_slider(i, set);
  385. }
  386.  
  387. function decrease_warnings_slider(i)
  388. {
  389.     var level = Number($('warning_level_' + i).getProperty('value'));
  390.     var set = 0;
  391.  
  392.     for (var j = 2; j >= 0; --j) {
  393.         if (level > warning_levels[j]) {
  394.             set = warning_levels[j];
  395.             break;
  396.         }
  397.     }
  398.  
  399.     set_warnings_slider(i, set);
  400. }
  401.  
  402. function toggle_warnings_type(i)
  403. {
  404.     var type = Number($('warning_type_' + i).getProperty('value'));
  405.     var set = warning_type_default;
  406.  
  407.     if (type != warning_type_block) {
  408.         set = warning_type_block;
  409.     }
  410.  
  411.     $('warning_type_' + i).setProperty('value', set);
  412.  
  413.     if (type == warning_type_none) {
  414.         set_warnings_slider(i, warning_levels[0]);
  415.     } else {
  416.         update_warnings_preset();
  417.         update_warnings_sliders();
  418.         changes = true;
  419.         update_buttons();
  420.     }
  421. }
  422.  
  423. function toggle_warnings_unknown(i)
  424. {
  425.     if (!update_warning_type(i)) {
  426.         update_warnings_preset();
  427.     }
  428. }
  429.  
  430. /* Forms */
  431.  
  432. var forms_inited = false;
  433.  
  434. function init_forms(container)
  435. {
  436.     var elems = 'input';
  437.     if (container) {
  438.         elems = '#' + container + ' ' + elems;
  439.     } else if (forms_inited) {
  440.         return;
  441.     }
  442.  
  443.     forms_inited = true;
  444.  
  445.     $$(elems).each(function(input, i) {
  446.             var type = input.getProperty('type');
  447.             if (type != 'checkbox' && type != 'radio') {
  448.                 return;
  449.             }
  450.             var label = null;
  451.             $$('label').each(function(item, j) {
  452.                     if (item.getProperty('for') == input.id) {
  453.                         label = item;
  454.                     }
  455.                 });
  456.             if (!label) {
  457.                 return;
  458.             }
  459.             input.addClass('replaced');
  460.             label.addClass(type);
  461.             if (input.checked) {
  462.                 label.addClass('checked');
  463.             } else {
  464.                 label.removeClass('checked');
  465.             }
  466.             if (!container) {
  467.                 label.addEvent('click', function() {
  468.                         if (this.hasClass('checkbox')) {
  469.                             this.toggleClass('checked');
  470.                         } else if (this.hasClass('radio')) {
  471.                             var box = $(this.getProperty('for'));
  472.                             clear_radios(box.getProperty('name'));
  473.                             this.addClass('checked');
  474.                         }
  475.                         changes = true;
  476.                         update_buttons();
  477.                     });
  478.             }
  479.         });
  480. }
  481.  
  482. function clear_radios(name)
  483. {
  484.     $$('label.radio').each(function(item, i) {
  485.             var input = $(item.getProperty('for'));
  486.             if (!input || (name && input.getProperty('name') != name)) {
  487.                 return;
  488.             }
  489.             item.removeClass('checked');
  490.     });
  491. }
  492.  
  493. /* Page initialization */
  494.  
  495. var rating_preview_height = 60;
  496.  
  497. function init_ratings()
  498. {
  499.     apps.slice(1).each(function(a, i) {
  500.             var item = $('show_application_' + a);
  501.  
  502.             item.addEvent('click', function() {
  503.                     init_forms(selected);
  504.  
  505.                     if (item.checked) {
  506.                         new Fx.Style('ratings-preview-' + i, 'height', {
  507.                             duration: 500,
  508.                             transition: Fx.Transitions.quadInOut,
  509.                             onStart: function() {
  510.                                     $('ratings-preview-' + i).setStyle('height', 0);
  511.                                     $('ratings-preview-' + i).setStyle('display', 'block');
  512.                                 },
  513.                             onComplete: function() {
  514.                                     update_warnings();
  515.                                     update_samples();
  516.                                 }
  517.                         }).start(0, rating_preview_height)
  518.                     } else {
  519.                         new Fx.Style('ratings-preview-' + i, 'height', {
  520.                             duration: 500,
  521.                             transition: Fx.Transitions.quadInOut,
  522.                             onComplete: function() {
  523.                                     $('ratings-preview-' + i).setStyle('display', 'none');
  524.                                     update_warnings();
  525.                                     update_samples();
  526.                                 }
  527.                         }).start(rating_preview_height, 0);
  528.                     }
  529.                 });
  530.             if (!item.checked) {
  531.                 $('ratings-preview-' + i).setStyle('display', 'none');
  532.             }
  533.         });
  534. }
  535.  
  536. function init_warnings()
  537. {
  538.     var level = $('wotlevel').getProperty('level');
  539.  
  540.     if (level && level == "registered") {
  541.         warning_custom_allowed = true;
  542.     }
  543.  
  544.     if (!warning_custom_allowed) {
  545.         var cover = $('warnings-custom-cover');
  546.  
  547.         cover.setStyle('display', 'block');
  548.         cover.addEvent('click', function() {
  549.                 showmessage('custom');
  550.             });
  551.  
  552.         $('warnings-level-custom').addEvent('click', function() {
  553.                 showmessage('custom');
  554.                 update_warnings_preset();
  555.             });    
  556.     } else {
  557.         $('warnings-level-custom').addEvent('click', function() {
  558.                 select_warnings_preset('custom');
  559.             });
  560.  
  561.         $('warnings-registered').setStyle('display', 'none');
  562.     }
  563.  
  564.     update_warnings_notification();
  565.     update_warnings_preset();
  566.     update_warnings_sliders();
  567.  
  568.     for (var i = 0; i < warning_presets.length; ++i) {
  569.         $('warnings-level-' + warning_presets[i].id).addEvent('click', function() {
  570.                 set_warnings_preset(this.id);
  571.             });
  572.     }
  573.  
  574.     apps.each(function(i, j) {
  575.             $('warnings-slider-' + i + '-increase').addEvent('click', function() {
  576.                     increase_warnings_slider(i);
  577.                 });
  578.             $('warnings-slider-' + i + '-decrease').addEvent('click', function() {
  579.                     decrease_warnings_slider(i);
  580.                 });
  581.             [ 0, 1, 2 ].each(function(k, l) {
  582.                     $('warnings-slider-' + i + '-image-' + k).addEvent('click', function() {
  583.                             set_warnings_slider(i, warning_levels[k]);
  584.                         });
  585.                 });
  586.             $('warnings-type-' + i + '-switch').addEvent('click', function() {
  587.                     toggle_warnings_type(i);
  588.                 });
  589.             $('warning_unknown_' + i).addEvent('click', function() {
  590.                     toggle_warnings_unknown(i);
  591.                 });
  592.         });
  593.  
  594.     $('warnings-type-notification').addEvent('click', function() {
  595.             toggle_warnings_notification();
  596.         });
  597. }
  598.  
  599. function init_searching()
  600. {
  601.     var type = Number($('search_type').getProperty('value'));
  602.  
  603.     [ 'optimized', 'worst', 'first' ].each(function(item, i) {
  604.             var elem = $('searching-type-' + item);
  605.             if (type == i) {
  606.                 elem.setProperty('checked', true);
  607.                 $('searching-help-' + item).setStyle('display', 'block');
  608.             }
  609.             elem.setProperty('wottype', i);
  610.             elem.addEvent('click', function() {
  611.                     $('search_type').setProperty('value',
  612.                         this.getProperty('wottype'));
  613.                     $$('.searching-help-text').each(function(text, j) {
  614.                             text.setStyle('display', 'none');
  615.                         });
  616.                     $('searching-help-' + item).setStyle('display', 'block');
  617.                 });
  618.         });
  619.  
  620.     $('use_search_level').addEvent('click', function() {
  621.             update_samples();
  622.         });
  623. }
  624.  
  625. function init_popup()
  626. {
  627.     $('show_search_popup').addEvent('click', function() {
  628.             update_samples();
  629.         });
  630. }
  631.  
  632. function init_advanced()
  633. {
  634.     var list = $('advanced-ignore-list');
  635.     list.setProperty('value', $('norepsfor').getProperty('value'));
  636.  
  637.     var changed = function() {
  638.             $('norepsfor').setProperty('value',
  639.                 $('advanced-ignore-list').getProperty('value'));
  640.             changes = true;
  641.             update_buttons();
  642.         };
  643.  
  644.     list.addEvent('change', changed);
  645.     list.addEvent('keypress', changed);
  646. }
  647.  
  648. /* Messages */
  649.  
  650. function showmessage(msg)
  651. {
  652.     $(msg).setStyle('opacity', 0);
  653.     $(msg).setStyle('display', 'block');
  654.     $('messages').setStyle('display', 'block');
  655.  
  656.     new Fx.Style(msg, 'opacity', {
  657.             duration: 250,
  658.             transition: Fx.Transitions.quadInOut
  659.         }).start(0, 0.9);
  660.  
  661.     window.setTimeout(function() {
  662.             new Fx.Style(msg, 'opacity', {
  663.                     duration: 500,
  664.                     transition: Fx.Transitions.quadInOut,
  665.                     onComplete: function() {
  666.                             $$('.message').each(function(item, i) {
  667.                                     item.setStyle('display', 'none');
  668.                                 });
  669.                             $('messages').setStyle('display', 'none');
  670.                         }
  671.                 }).start(0.9, 0);
  672.         }, 2500);
  673. }
  674.  
  675. /* Callbacks */
  676.  
  677. function wotsettings_ready()
  678. {
  679.     $('loading-page').setStyle('display', 'none');
  680.  
  681.     /* Initialize */
  682.     init_forms();
  683.     init_ratings();
  684.     init_warnings();
  685.     init_searching();
  686.     init_popup();
  687.     init_advanced();
  688.  
  689.     update_samples();
  690.     update_warnings();
  691.  
  692.     /* Page */
  693.     setpage();
  694.  
  695.     /* Tabs */
  696.     $$('.tab').each(function(tab, i) {
  697.             var location = '#' + tab.id.substr(4);
  698.             tab.addEvent('click', function() {
  699.                     window.location.hash = location;
  700.                     setpage();
  701.                 });
  702.         });
  703.  
  704.     /* Cancel */
  705.     $('cancel').addEvent('click', function() {
  706.             if (changes) {
  707.                 window.location.reload();
  708.             }
  709.         });
  710. }
  711.  
  712. function wotsettings_saved()
  713. {
  714.     changes = false;
  715.     update_buttons();
  716.     showmessage('saved');
  717. }
  718.  
  719. function wotsettings_failed()
  720. {
  721.     showmessage('failed');
  722. }
  723.